package com.example.sunming.likou;

import java.util.HashMap;
import java.util.Map;

/**
 * @author: sunming
 * @date: 2020/4/13
 * @description:
 */
public class Test3 {
    public static void main(String[] args) {
        String str = "aabcccccaaa";
        String s = yaSuo(str);
        System.out.println(s);

    }

    /**
     * 示例1:
     输入："aabcccccaaa"
     输出："a2b1c5a3"
     示例2:
     输入："abbccd"
     输出："abbccd"
     解释："abbccd"压缩后为"a1b2c2d1"，比原字符串长度更长。
     */
    public static String yaSuo(String str) {
        Map<String, Integer> map = new HashMap<>(10);
        StringBuilder sb = new StringBuilder();
        String[] split = str.split("");
        // 记录上一个字母
        String ago;
        for (int i = 0; i < split.length; i++) {
            int totalNum = 1;
            String s = split[i];
            if (i > 0) {
                // 如果当前字母与上一个字母不相同
                ago = split[i - 1];
                if (!s.equals(ago)) {
                    sb.append(ago).append(map.get(ago));
                    map = new HashMap<>();
                }
            }
            if (map.containsKey(s)) {
                totalNum = map.get(s) + 1;
            }
            map.put(s, totalNum);
            if (i == split.length - 1) {
                sb.append(s).append(map.get(s));
            }
        }

        String result = sb.toString();
        // 如果压缩后的字符串没有变短，则返回原来的
        if (result.length() >= str.length()) {
            return str;
        } else {
            return result;
        }
    }
}
